class Solution {
public:
    int totalFruit(vector<int>& fruits) 
    {
        //暴力做法每次枚举从那一棵树开始进行采摘
        //本质就是找一段子区间其中数字只有两个的最大子区间
        int ret=0;
        //可以用滑动窗口进行优化
        unordered_map<int,int> count;
        for(int left=0,right=0;right<fruits.size();)
        {
            //进窗口
            //滑动窗口就是考虑清楚出窗口后进行我们的结果什么时候更新
            count[fruits[right++]]++;
            while(count.size()>2)
            {
                //出窗口
                count[fruits[left]]--;
                if(count[fruits[left]]==0)
                {
                    count.erase(fruits[left]);
                }
                left++;
            }
            //每次进窗口我们都要更新结果
            ret=max(ret,right-left);
        }
        return ret;
    }
};